package com.duguyuan.utils;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

/**
 * 增强的HashMap工具类，要求key不可重复，并且value也不可重复
 */
public class EnhancedHashMap<K, V> extends HashMap<K, V> {

    /**
     * 根据value来删除指定项
     * @param value
     */
    public void removeByValue(Object value) {
        for (Object key : keySet()) {
            if (get(key) == value) {
                remove(key);
                break;
            }
        }
    }

    /**
     * 获取所有value组成的Set集合
     * @return
     */
    public Set<V> valueSet() {
        Set<V> result = new HashSet<V>();
        for (K key : keySet()) {
            result.add(get(key));
        }
        return result;
    }

    /**
     * 根据value查找key
     * @param value
     * @return
     */
    public K getKeyByValue(V value) {
        for (K key : keySet()) {
            if (get(key).equals(value) && get(key) == value) {
                return key;
            }
        }
        return null;
    }

    /**
     * 重写HashMap的put方法，该方法不允许value重复
     * @param key
     * @param value
     * @return
     */
    public V put(K key, V value) {
        for (V val : valueSet()) {
            if (val.equals(value) && val.hashCode() == value.hashCode()) {
                throw new RuntimeException("EnhancedHashMap中不允许存在重复的value");
            }
        }
        return super.put(key, value);
    }
}
